home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue57 / DragDrop / DragObjectsU.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2000-03-23  |  3.9 KB  |  137 lines

  1. unit DragObjectsU;
  2.  
  3. {$ifdef Ver90} { Delphi 2.0x }
  4.   {$define DelphiLessThan4}
  5. {$endif}
  6. {$ifdef Ver93} { C++ Builder 1.0x }
  7.   {$define DelphiLessThan4}
  8. {$endif}
  9. {$ifdef Ver100} { Delphi 3.0x }
  10.   {$define DelphiLessThan4}
  11. {$endif}
  12. {$ifdef Ver110} { C++ Builder 3.0x }
  13.   {$define DelphiLessThan4}
  14. {$endif}
  15.  
  16. interface
  17.  
  18. uses
  19.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  20.   StdCtrls, ExtCtrls;
  21.  
  22. type
  23.   //Delphi 4 and later allows us to inherit custom drag objects from 
  24.   //TDragControlObject (earlier versions forced you to go back to TDragObject)
  25.   TTextDragObject = class(TDragControlObject)
  26.   public
  27.     Data: String;
  28.   end;
  29.  
  30.   TForm1 = class(TForm)
  31.     Label1: TLabel;
  32.     Edit1: TEdit;
  33.     Panel1: TPanel;
  34.     Button1: TButton;
  35.     Memo1: TMemo;
  36.     ListBox1: TListBox;
  37.     ComboBox1: TComboBox;
  38.     procedure Button1StartDrag(Sender: TObject;
  39.       var DragObject: TDragObject);
  40.     procedure Label1StartDrag(Sender: TObject;
  41.       var DragObject: TDragObject);
  42.     procedure ComboBox1StartDrag(Sender: TObject;
  43.       var DragObject: TDragObject);
  44.     procedure Edit1StartDrag(Sender: TObject; var DragObject: TDragObject);
  45.     procedure Memo1StartDrag(Sender: TObject; var DragObject: TDragObject);
  46.     procedure ListBox1StartDrag(Sender: TObject;
  47.       var DragObject: TDragObject);
  48.     procedure SharedEndDrag(Sender, Target: TObject; X, Y: Integer);
  49.     procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  50.       State: TDragState; var Accept: Boolean);
  51.     procedure Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
  52.   private
  53.     FDragObject: TTextDragObject;
  54.   end;
  55.  
  56. var
  57.   Form1: TForm1;
  58.  
  59. implementation
  60.  
  61. {$R *.DFM}
  62.  
  63. { TForm1 }
  64.  
  65. procedure TForm1.Button1StartDrag(Sender: TObject;
  66.   var DragObject: TDragObject);
  67. begin
  68.   FDragObject := TTextDragObject.Create(Sender as TButton);
  69.   FDragObject.Data := TButton(Sender).Caption;
  70.   DragObject := FDragObject;
  71. end;
  72.  
  73. procedure TForm1.Label1StartDrag(Sender: TObject;
  74.   var DragObject: TDragObject);
  75. begin
  76.   FDragObject := TTextDragObject.Create(Sender as TLabel);
  77.   FDragObject.Data := TLabel(Sender).Caption;
  78.   DragObject := FDragObject;
  79. end;
  80.  
  81. procedure TForm1.ComboBox1StartDrag(Sender: TObject;
  82.   var DragObject: TDragObject);
  83. begin
  84.   FDragObject := TTextDragObject.Create(Sender as TComboBox);
  85.   FDragObject.Data := TComboBox(Sender).Text;
  86.   DragObject := FDragObject;
  87. end;
  88.  
  89. procedure TForm1.Edit1StartDrag(Sender: TObject;
  90.   var DragObject: TDragObject);
  91. begin
  92.   FDragObject := TTextDragObject.Create(Sender as TEdit);
  93.   FDragObject.Data := TEdit(Sender).Text;
  94.   DragObject := FDragObject;
  95. end;
  96.  
  97. procedure TForm1.Memo1StartDrag(Sender: TObject;
  98.   var DragObject: TDragObject);
  99. begin
  100.   FDragObject := TTextDragObject.Create(Sender as TMemo);
  101.   FDragObject.Data := TMemo(Sender).Text;
  102.   DragObject := FDragObject;
  103. end;
  104.  
  105. procedure TForm1.ListBox1StartDrag(Sender: TObject;
  106.   var DragObject: TDragObject);
  107. begin
  108.   FDragObject := TTextDragObject.Create(Sender as TListBox);
  109.   with TListBox(Sender) do
  110.     FDragObject.Data := Items[ItemIndex];
  111.   DragObject := FDragObject;
  112. end;
  113.  
  114. procedure TForm1.SharedEndDrag(Sender, Target: TObject; X, Y: Integer);
  115. begin
  116.   //All draggable controls share this event handler
  117.   FDragObject.Free;
  118.   FDragObject := nil
  119. end;
  120.  
  121. procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  122.   State: TDragState; var Accept: Boolean);
  123. begin
  124.   //It is tempting to write this...
  125.   //Accept := Source is TTextDragObject
  126.   //...however we are advised to write this instead
  127.   Accept := IsDragObject(Source)
  128. end;
  129.  
  130. procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
  131. begin
  132.   //The OnDragOver event handler verified we are dealing with a
  133.   //drag object so there is no chance of getting a normal control
  134.   (Sender as TPanel).Caption := TTextDragObject(Source).Data
  135. end;
  136.  
  137. end.